package domein.Models;

import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;


import javax.swing.table.AbstractTableModel;

import domein.Continent;
import domein.Waarneming;

import persistentie.MapperFactory;

@SuppressWarnings("serial")
public class WaarnemingenTableModel extends AbstractTableModel{
	private String[] columnNames= {"Datum","Type","Temp","Neerslag"};
    private List<Waarneming> waarnemingen;
	private DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
	private Waarneming waarneming;
	private boolean editable = true;
	
	public WaarnemingenTableModel(int locatieID){
		try {
			waarnemingen = MapperFactory.getInstance().getMapper(Waarneming.class).read(locatieID);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}	
			
	}

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return waarnemingen.size();
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
    	Waarneming waarneming = waarnemingen.get(row);
    	
    	if(waarneming.getEditable() == 0)
    		editable = false;
    	else if(waarneming.getEditable() == 1)
    		editable = true;
    	
    	switch(col){
    	case 0:
			return formatter.format(waarneming.getDatumWaarneming());
    	case 1:
			return waarneming.getTypeWaarneming();
    	case 2:
    		return waarneming.getTemperatuurWaarneming();
    	case 3:
    		return waarneming.getNeerslagWaarneming();
    	}
    	
		return null;
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }


    public boolean isCellEditable(int row, int col) {
    	       return editable;
    }

    public void setValueAt(Object value, int row, int col) {
    	waarneming = waarnemingen.get(row);
    	switch(col){
    	case 0:
    		try {
    			java.util.Date utilDate = (java.util.Date)formatter.parse((String) value );
    			long time = utilDate.getTime();
        		java.sql.Date sqlDate = new java.sql.Date(time);
        		waarneming.setDatumWaarneming(sqlDate);
    		} catch (ParseException e) {
				e.printStackTrace();
			}
    		
			break;
    	case 1:
			waarneming.setTypeWaarneming((Integer)value);
			break;
    	case 2:
    		waarneming.setTemperatuurWaarneming((Double)value);
    		break;
    	case 3:
    		waarneming.setNeerslagWaarneming((Double)value);
    		break;
    	}
    	
    	MapperFactory.getInstance().getMapper(Waarneming.class).wijzig(waarneming);
        fireTableCellUpdated(row, col);
    }
}
